package 笔试.thr;


import java.util.*;

//zmh 哈夫曼深搜
public class B {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String s = sc.nextLine();
        solve(s);
    }

    static List<List<String>> res = new ArrayList<>();
    static List<String> tmp = new ArrayList<>();
    public static int solve (String w){
        qian(w);
//        System.out.println(res);

        int maxLen = 0;
        List<String> maxlist= new ArrayList<>();
        for (int i = 0; i < res.size(); i++) {
            if(res.get(i).size()>maxLen){
               maxLen= res.get(i).size();
               maxlist=res.get(i);
            }

        }
//        System.out.println(maxlist);

        List<Integer> r = new ArrayList<>();
        for (int i = 0; i < maxlist.size(); i++) {
            int cur = Integer.parseInt(maxlist.get(i));

            r.add(map.get(cur));
        }
        if(r.size()==0){
            System.out.println(1);
            System.out.print(map.get(Integer.parseInt(w)));
        }
        else {
            System.out.println(r.size());
            for (int i = 0; i < r.size(); i++) {
                System.out.print(r.get(i) + " ");
            }
        }
        return 0;
    }
    static public void qian(String s){
        if(s.length()==1){
            if(judge(s)){
                tmp.add(s);
                res.add(new ArrayList<>(tmp));
                tmp.remove(tmp.size()-1);
            }
            return;
        }
        if(s.length()==0){
            res.add(new ArrayList<>(tmp));
            return;
        }
        if(s.length()>=1) {
            String yi = s.substring(0, 1);
            if (judge(yi)) {
                tmp.add(yi);
                qian(s.substring(1, s.length()));
                tmp.remove(tmp.size()-1);
            }
        }
        if(s.length()>=2) {
            String lia = s.substring(0, 2);
            if (judge(lia)) {
                tmp.add(lia);
                qian(s.substring(2, s.length()));
                tmp.remove(tmp.size()-1);

            }
        }
        if(s.length()>=3) {
            String sa = s.substring(0, 3);
            if (judge(sa)) {
                tmp.add(sa);
                qian(s.substring(3, s.length()));
                tmp.remove(tmp.size()-1);
            }
        }
        if(s.length()>=4) {
            String si = s.substring(0, 4);
            if (judge(si)) {
                tmp.add(si);
                qian(s.substring(4, s.length()));
                tmp.remove(tmp.size()-1);

            }
        }
        if(s.length()>=5) {
            String wu = s.substring(0, 5);
            if (judge(wu)) {
                tmp.add(wu);
                qian(s.substring(5, s.length()));
                tmp.remove(tmp.size()-1);

            }
        }

    }

    static List<Integer> sushu = new ArrayList<>();
    static Map<Integer,Integer> map = new HashMap<>();
    static {
        for (int i = 1; i < 100000; i++) {
            int f=0;
            for (int j = 2; j <i; j++) {
                if(i%j==0){
                    f=1;
                    break;
                }
            }
            if(f==0)sushu.add(i);
        }
//        System.out.println("ss"+sushu);

        for (int i = 0; i < sushu.size(); i++) {
            map.put(sushu.get(i),i);
        }
    }

    static boolean judge(String s){
        int x = Integer.parseInt(s);
        for (int i = 0; i < s.length() - 1; i++) {
            if (Integer.parseInt(s.charAt(i) + "") == 0) {
                return false;
            }
        }
        if(sushu.contains(x)){
            return true;
        }
        return false;
    }
}
